package br.com.cedente.log;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import br.com.sicoob.model.IndiceDeDados;

public class RegistroDeLog extends Logger {
	
	private static RegistroDeLog log;

	public static String message;
	public static String descMensagem;
		
	public static RegistroDeLog getInstance(String classe){
		if(log == null){
			log = new RegistroDeLog(classe);
		}
		return log;
	}
	
	public RegistroDeLog(String name) {
		super(name, null);
		addFileHandler();
		addConsoleHandler();
		
	}

	private void addConsoleHandler() {
		SSFormatter ssFormatter = new SSFormatter();
		ConsoleHandler consoleHandler = new ConsoleHandler();
		consoleHandler.setFormatter(ssFormatter);
		consoleHandler.setLevel(Level.ALL);
		this.addHandler(consoleHandler);
	}

	private void addFileHandler() {
		try {
			int tamanhoArquivo = 100000000;
			String desktop = System.getProperty("user.home") + "\\"+"Desktop"+"\\"+"logCedente.txt";
			FileHandler fileHandler = new FileHandler(desktop,tamanhoArquivo,1, true);
			fileHandler.setFormatter(new SSFormatter());
			this.addHandler(fileHandler);
		} catch (SecurityException e) {
			severe(e.getMessage());
		} catch (IOException e) {
			severe(e.getMessage());
		}
	}
	
		
	private String mensagensLog(String msg){
		message = msg;
		return message;
	}
	
	@Override
	public void warning(String arg0) {
		super.warning(mensagensLog(arg0));
	}
	
	@Override
	public void info(String arg0) {
		super.info(mensagensLog(arg0));
	}
	
	@Override
	public void severe(String arg0) {
		super.severe(mensagensLog(arg0));
	}
	
	private class SSFormatter extends Formatter {

		@Override
		public String format(LogRecord paramLogRecord) {
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder
				    .append(paramLogRecord.getLevel()).append("|")
				    .append(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())).append("|")
					.append(paramLogRecord.getSourceMethodName()).append(": ")
					.append(paramLogRecord.getMessage()).append("\n");
			return stringBuilder.toString();
		}
	}

	public void severe(IndiceDeDados erroConn) {
		descMensagem = erroConn.getValor();
	}
	
	
	public void warning(IndiceDeDados erroConn) {
		descMensagem = erroConn.getValor();
	}
	
	
	public void info(IndiceDeDados erroConn) {
		descMensagem = erroConn.getValor();
	}
	
}
